// import 'package:enjoy_plus/pages/home/index.dart';
// import 'package:enjoy_plus/pages/mine/index.dart';
import 'dart:async';

import 'package:enjoy_plus_test/utils/eventbus.dart';
import 'package:event_bus/event_bus.dart';
import 'package:flutter/material.dart';

import '../utils/token.dart';
import 'home/index.dart';
import 'mine/index.dart';

class TabBarPage extends StatefulWidget {
  const TabBarPage({super.key});

  @override
  State<TabBarPage> createState() => _TabBarPageState();
}

class _TabBarPageState extends State<TabBarPage> {
  // 记录当前索引
  int currentIndex = 0;

  // 底部TabBar数据
  List tabBarList = [
    {
      "title": "首页",
      "default": "assets/tabs/home_default.png",
      "active": "assets/tabs/home_active.png",
    },
    {
      "title": "我的",
      "default": "assets/tabs/my_default.png",
      "active": "assets/tabs/my_active.png",
    },
  ];

  List<BottomNavigationBarItem> barItemList() {
    List<BottomNavigationBarItem> items = [];
    for (var item in tabBarList) {
      items.add(
        BottomNavigationBarItem(
          icon: Image.asset(item['default'], width: 32, height: 32),
          activeIcon: Image.asset(item['active'], width: 32, height: 32),
          label: item['title'],
        ),
      );
    }
    return items;
  }

  // 在 Dart 里，late 关键字用于声明延迟初始化的变量
  //   借助 late 关键字，你可以先声明变量，之后再对其进行初始化
  /*StreamSubscription 是 Dart 中用来管理 Stream 订阅的类。Stream 代表一系列异步事件，
  而 StreamSubscription 则负责对这些事件的监听与控制*/
  /*LogoutEvent:表示StreamSubscription 监听的是 LogoutEvent 类型的事件*/
  late StreamSubscription<LogoutEvent> _eventSubscription;
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    //Duration.zero代表延迟时间为0，即立即执行，
    // Future.valued和Future.delayed都会进入放到微任务队列，而微任务实在同步代码之后立即执行的，但是是在build方法执行之前
    // 而initState是同步的，所以initState执行完就会立即执行Future.valued和Future.delayed，但因为有Duration.zero，
    // Future.delayed中的会点函数就会放在build方法执行完成之后执行

    /*同步任务=》微任务队列==》事件队列*/
    Future.delayed(Duration.zero, () async {
      await TokenManager().init();
    });
    // 监听LogoutEvent事件，
    // _eventSubscription = eventBus.on<LogoutEvent>().listen((event) {
    //   // 401token过期之后会发送LogoutEvent事件，此处监听到该事件之后就跳转至登录页
    //   Navigator.pushNamed(context, '/login');
    // });
  }

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
    // 当组件销毁时，取消事件监听，防止内存泄漏
    // _eventSubscription.cancel();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(//确保内容显示在系统 UI（状态栏、刘海屏等）之外的安全区域
        /*IndexedStack 是 Flutter 中的一个布局组件，用于在多个子组件之间按索引切换显示，同时保持所有子组件的状态。
        它与 Stack 类似，但通过 index 属性控制显示哪一个子组件，其他子组件会被隐藏但不会销毁*/
        child: IndexedStack(
          index: currentIndex,//控制显示的子组件索引
          children:  [ const HomePage(), MinePage(
              currentIndex:currentIndex,
          )],
        ),
      ),
      bottomNavigationBar: BottomNavigationBar(
        type: BottomNavigationBarType.fixed,//固定显示所有导航项
        items: barItemList(),//通过自定义方法生成导航项（需确保返回 List<BottomNavigationBarItem>）
        currentIndex: currentIndex,
        selectedItemColor: const Color.fromARGB(255, 85, 145, 175),
        unselectedItemColor: Colors.black,
        onTap: (index) {
          // 点击导航项时更新 currentIndex 并触发界面刷新
          setState(() {
            currentIndex = index;
          });
        },
      ),
    );
  }
}
